FPGA千兆网口数据传输MDIO接口 您所在的位置:网站首页 fpga 千兆以太网 FPGA千兆网口数据传输MDIO接口

FPGA千兆网口数据传输MDIO接口

2024-07-15 11:26| 来源: 网络整理| 查看: 265

一、以太网简介

        是当今现有局域网采用的最通用的通信协议标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。成本低,通信速率高,抗干扰能力强。

        1、分类

标准以太网:10Mbit/s

快速以太网:100Mbit/s

千兆以太网:1000Mbit/s

.........

以太网和千兆网口其实不完全相同。以太网是一种局域网技术标准,而千兆网口通常指的是支持1Gb/s(即千兆位每秒)速度的网络接口。

以太网是一种通用的局域网技术标准,定义了数据传输的规范和硬件设备之间的通信方式。而千兆网口是一种物理接口标准,用于连接计算机或其他网络设备到网络中,支持更高的数据传输速度。

因此,可以说千兆网口是以太网的一种实现方式,它提供了更快的数据传输速度,但并不等同于以太网。在实际应用中,通常会使用以太网技术,并通过千兆网口进行连接,以实现更快的网络通信速度。

        2、以太网接口

        以太网通信离不开连接端口的支持,网络数据连接的端口就是以太网接口。以太网接口类型有RJ45接口,RJ11接口(电话线接口),SC光纤接口等其中RJ45接口是我们现在最常见的网络设备接口(如:电脑网口)

3、6一对是为了向下兼容10/100M

上图为RGMII接口,时钟为双沿2.5MHz、25MHz、250MHz。位宽为4位。(节省引脚)

GMII接口,时钟为单沿1.25MHz、12.5MHz、125MHz。位宽为8位。

MAC侧完成对报文的封包和解包过程

PHY芯片:实现模数转换

ETH_RXC接收端时钟ETH_RXCTL接收端数据使能(接受报文有效,该引脚拉高)ETH_RXD[3:0]接收数据ETH_TXC发送端时钟ETH_TXCTL发送端数据使能(发送报文有效,该引脚拉高)ETH_TXD[3:0]发送数据ETH_RST_N复位脚ETH_MDCETH_MDIO

MDIO接口:(默认即可实现功能)

        3、UDP网络协议简介

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的网络传输协议,位于OSI模型的传输层。以下是UDP网络协议的简介:

                (1)无连接性:UDP是一种无连接的协议,发送端在发送数据之前不需要与接收端建立连接,也不会维护连接状态。

                (2)面向数据报:UDP以数据报(Datagram)的形式传输数据,每个数据报都是独立的,互相之间没有关联。

                (3)不可靠性:UDP不提供数据可靠性保证,数据报可能会丢失、重复或无序到达。也不会进行数据校验和重传。

                (4)高效性:由于没有连接建立和维护的开销,以及简化的功能,UDP比TCP更轻量级,传输效率更高。

                (5)适用场景:UDP适用于对实时性要求高、数据传输完整性要求不高的应用场景,如音频、视频流媒体传输、在线游戏等。

                总的来说,UDP是一种简单、高效但不可靠的网络传输协议,适用于对实时性要求高、能容忍少量数据丢失的应用场景。

        4、数据链路

        数据通过FPGA进行数据协议的打包和MAC协议处理,通过RGMII总线协议传输将数据传送至PHY芯片,PHY芯片将数据进行处理后发送至RJ45接口进行数据发送。

        物理层(RJ45网口接口)、数据链路层(PHY芯片和MAC协议)、网络层(在FPGA中处理的MAC协议)、传输层(在FPGA中处理的数据协议打包,用UDP或者TCP协议就是说的这一层)

二、以太网PHY芯片简介RTL8211         1、PHY芯片:物理层芯片(物理接口收发器)

                自动协商通信速率,或自行配置

        2、BMCI寄存器配置(RTL8211为例)

                BMCI寄存器addr为:0x00

                (1)0.15:软件复位,1复位,0工作。结束复位后,无需手动写0,结束复位会自动归0,

                (2)0.14:环回,主要用于检测,1使能,0失能。

                (3)0.13,0.6:Speed配置,配置不同速率(先失能自协商) 

                (4)0.12:自协商配置,默认使能,1使能,0失能。

                (5)0.11:掉电模式配置,1掉电模式,0正常工作模式。

                (6)0.10:隔离配置,RGMII接口隔离,引脚失能,只有MDIO,MDC配置有效

                (7)0.9:重新开始自协商配置。

                (8)0.8:双工模式配置

                (9)0.7:冲突测试

                (10)0.5:单向使能:1双方建立连接成功后通信,0直接通信

        3、BMSR寄存器配置

                BMCI寄存器addr为:0x01

                        (1)1.5:自协商完成

                        (2)1.2:是否连接OK

        4、PHYSR寄存器配置

                BMCI寄存器addr为:0x11

                (1)17.15:14  :连接速率(前提link ok,自协商完成)

三、以太网PHY芯片简介YT8531         1、PHY芯片

网线差分模拟信号转换数字信号,FPGA数字信号转换网线差分模拟信号。

        2、引脚复用

        3、硬件原理图(正点原子达芬奇开发板)

22R电阻做阻抗匹配。

        4、PHY地址接口

一定会响应0x00!!

        5、基本控制寄存器配置

寄存器地址0x00

                (1) 15:软复位,带自清0,默认为0 。0工作,1复位。

                (2) 14:内部环回,默认为0。0失能,1使能。

                (3) 13:速率配置低位,关闭自协商才可以使用,bit6,13进行配置。

                (4) 12:自协商使能,默认支持。1使能,0失能。

                (5) 11:掉电模式,1掉电,0正常。

                (6) 10:隔离模式,一般为0正常模式

                (7) 9:重新自协商,自带置1。

                (8) 8:配置双工,关闭自协商才可以使用,1双工,0半双工。

        6、基本状态寄存器配置 

寄存器地址0x01

                (1) 13:双工模式检测。        0:半双工,         1:全双工。

                (2) 15~14:传输速度等级检测。10:1000M      01:100M       00:10M

                (3) 2:连接状态。      1:连接已建立,        0:链接未建立。

                (4) 3:自协商能力,    1具有,      0不具备。

                (5) 4:远端错误指示位:读取后自动清0         0:远端设备正常    1:远端设备异常

                (6) 5:自协商完成标志,软复位后自动清0       1:完成自协商      0:未完成自协商。

                (7) 6:前导码模式,1:不检测前导码直接接受        0:检测前导码

                (8) 7:单项传输能力:0:当检测到建立有效连接才开始传输     1:直接开始传输。

        7、特定状态寄存器

寄存器地址0x11

四、MDIO接口时序

        MDIO: Management Data Input/Output

        也被称为SMI ( Serial Management Interface ) ,即串行管理接口。

        MAC和 PHY芯片有一个配置接口,即MDIO接口,可以配置 PHY芯片的工作模式以及获取 PHY芯片的若干状态信息。 

        1、MDIO接口连接图

        2、PHY帧格式

        管理接口通过MDC和MDIO引脚提供对内部寄存器的访问,如IEEE802.3u第22节所述。MDC信号由MAC提供,是MDIO信号的管理数据时钟参考。MDIO是管理数据的输入/输出,是一个双向信号,与MDC同步运行。MDIO引脚需要一个1.5k欧姆的上拉电阻,以在空闲和周转期间保持MDIO高电平。

前置抑制为RTL8211E/RTL8211EG上电后的默认设置。然而,在操作之间仍然必须至少有一个空闲位。RTL8211E/RTL8211EG可以共享同一条MDIO线。在交换机/路由器应用程序中,每个端口应该在硬件复位序列中分配一个唯一的地址,并且只能通过该唯一的PHY地址进行寻址。有关RTL8211E/RTL8211EG管理寄存器的详细信息,请参见第30页第8节寄存器描述。

写状态下,一直由FPGA输出数据给到PHY芯片;读状态下,在TA位切换方向

                (1)Preamble:前导码,32个逻辑1,同时给出时钟。

                (2)ST:帧开始。固定01

                (3)OP:操作码,指示当前读写

                (4)PHYAD:PHY地址

                (5)REGAD:寄存器地址

                (6)TA:2bit宽度,时间间隔,切换FPGA数据线方向。Z为高阻状态,0为应答。

                (7)DATA:数据 

        3、PHY读写传输时序

                        上升沿采集数据,下降沿更新数据;MDC的最小周期为80ns对应时钟最大为12.5MHz 

 

五、MDIO读写测试实验

        PHY芯片不进行配置也可以使用 

        1、系统框图

        2、模块原理图

u_mdio_dri模块:

op_addr:读写地址

op_exec:触发信号↓↓↓↓↓↓↓↓↓↓↓

op_rh_wl:读写标志信号    1读    0写

op_wr_data:具体写入数据

op_done:读写结束后,拉高该信号

op_rd_ack:读应答信号    0应答     1未应答(帧格式里面的AT)

op_rd_data:读出的信号

dri_clk:驱动时钟

 当op_exec信号拉高标志一次读写操作开始,根据op_rh_wl状态判断读写操作,同时给出读写操作地址op_addr(如果是写操作要对应给出op_wr_data),读写操作结束后,拉高op_done信号,表示当前读写操作完成,控制模块可以发起下一次操作(如果是写读操作,在op_done为高期间,如果是0表示应答,如果是1表示未应答)(如果读操作,在op_done为高期间,会返回读到的数据)。

        3、状态机

        4、用户接口时序

        5、程序设计                 (1)mdio_dri模块

module mdio_dri #( parameter PHY_ADDR = 5'b00100,//PHY地址 parameter CLK_DIV = 6'd10 //分频系数 ) ( input clk , //时钟信号 input rst_n , //复位信号,低电平有效 input op_exec , //触发开始信号 input op_rh_wl , //低电平写,高电平读 input [4:0] op_addr , //寄存器地址 input [15:0] op_wr_data, //写入寄存器的数据 output reg op_done , //读写完成 output reg [15:0] op_rd_data, //读出的数据 output reg op_rd_ack , //读应答信号 0:应答 1:未应答 output reg dri_clk , //驱动时钟 output reg eth_mdc , //PHY管理接口的时钟信号 inout eth_mdio //PHY管理接口的双向数据信号 ); //parameter define localparam st_idle = 6'b00_0001; //空闲状态 localparam st_pre = 6'b00_0010; //发送PRE(前导码) localparam st_start = 6'b00_0100; //开始状态,发送ST(开始)+OP(操作码) localparam st_addr = 6'b00_1000; //写地址,发送PHY地址+寄存器地址 localparam st_wr_data = 6'b01_0000; //TA+写数据 localparam st_rd_data = 6'b10_0000; //TA+读数据 //reg define reg [5:0] cur_state ; reg [5:0] next_state; reg [5:0] clk_cnt ; //分频计数 reg [15:0] wr_data_t ; //缓存写寄存器的数据 reg [4:0] addr_t ; //缓存寄存器地址 reg [6:0] cnt ; //计数器 reg st_done ; //状态开始跳转信号 reg [1:0] op_code ; //操作码 2'b01(写) 2'b10(读) reg mdio_dir ; //MDIO数据(SDA)方向控制 reg mdio_out ; //MDIO输出信号 reg [15:0] rd_data_t ; //缓存读寄存器数据 //wire define wire mdio_in ; //MDIO数据输入 wire [5:0] clk_divide ; //PHY_CLK的分频系数 assign eth_mdio = mdio_dir ? mdio_out : 1'bz; //控制双向io方向 assign mdio_in = eth_mdio; //MDIO数据输入 //将PHY_CLK的分频系数除以2,得到dri_clk的分频系数,方便对MDC和MDIO信号操作 assign clk_divide = CLK_DIV >> 1; //分频得到dri_clk时钟 always @(posedge clk or negedge rst_n) begin if(!rst_n) begin dri_clk


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有